// AidlSystem.aidl
package  com.basewin.mdm.aidl;

import com.basewin.mdm.aidl.IResultCallback;
import com.basewin.mdm.aidl.IUniversalCallback;
// Declare any non-default types here with import statements

interface AidlSystem
{
    /**
     * 返回厂商
     * @return 厂商
     */
    String getManufacturer();

	/**
     * 返回终端型号
     * @return 终端型号
     */
	String getModel();

    /**
     * 返回硬件平台
     * @return 硬件平台
     */
    String getPlatform();

    /**
     * 返回终端序列号
     * @return 序列号
     */
    String getSerialNumber();

    /**
     * 返回终端IMEI或者MEID
     * @return 序列号
     */
    String getImeiOrMeid();

    /**
     * 返回客户名 ，由机构定义（和后台保持一致，需咨询机构对应管理人员）
     * @return 客户名
     */
    String getCustomerName();

    /**
     * 返回子客户名 ，由机构定义（需咨询机构对应管理人员）
     * @return 子客户名
     */
    String getCustomerSubName();

    /**
     * 返回硬件版本
     * @return 硬件版本
     */
    String getHardwareVersion();

    /**
     * 返回Android 版本
     * @return Android 版本
     */
    String getAndroidVersion();

    /**
     * 返回Android SDK版本
     * @return Android SDK版本
     */
    String getAndroidSdkVersion();

    /**
     * 返回支持的固件标识
     *
     * @return 设备支持的固件标识： 区分大小写
     * 1.和后台上传升级包的标识保持一致
     * 2.系统升级 固定使用：ap（小写）
     * 3. sp , univ 表示其他模块标识，可用于升级其他模块，或者其他获取其他模块信息
     */
    String[] getSupportFiremwareTypes();

  /**
     * 返回 指定类型的固件信息
     *
     * @param firmwareType 设备支持的固件标识： 区分大小写
     *                     1.和后台上传升级包的标识保持一致
     *                     2.系统升级 固定使用：ap（小写）
     *                     3.sp ，nuiv 其他固件模块标识getSupportFiremwareTypes（）定义的
     * @return 固件信息：名称，版本，标识 （顺序固定）
     */
    String[] getFirmwareInfo(String firmwareType);

    /**
     * 返回固件状态
     *
     * @param firmwareType 设备支持的固件标识： 区分大小写
     *                     1.和后台上传升级包的标识保持一致
     *                     2.系统升级 固定使用：ap（小写）
     * @return 固件状态
     * (-1 -- 不支持, 0 -- 锁定, 1 -- 解锁但未写入密钥, 2 -- 正常, 3 -- 触发
     * 4 -- 正在更新, 5 ---- 未初始化, 6 -- 初始化中 ， 7 -- 禁用
     */
    int getFirmwareState(String firmwareType);

    /**
     * 返回基带软件版本
     * @return 基带软件版本
     */
    String getModemVersion();

    /**
     * 返回内核版本
     * @return 内核版本
     */
    String getKernelVersion();

    /**
     * 返回Pos 驱动版本
     * @return Pos 驱动版本
     */
    String getPosSdkVersion();

    /**
     * 返回编译描述
     * @return 编译描述
     */
    String getBuildDescription();

    /**
     * 返回当前网络类型
     * @return 当前网络类型 （2G，3G，4G，WIFI，Ethernet）
     */
    String getNetworkType();



      /**
      * 返回设备位置
      *
      * @return 设备位置（"经度，纬度"）
      */
      String getLocation();

      /**
       * 返回存储状态
       * @return 存储状态（存储设备1名字:可用空间/总容量 存储设备2名字：可用空间/总容量...）
       */
      String getStorageStatus();


    /**
     * 返回蓝牙地址
     * @return 蓝牙地址
     */
    String getBluetoothAddress();

    /**
     * 返回WIFI地址
     * @return WIFI地址
     */
    String getWifiAddress();

    /**
     * 返回是否处于交易状态
     * 和强制升级的逻辑有关，交易状态下会分三次各等待2min，然后强制升级
     * @return 是否处于交易状态
     */
    boolean isInTransaction();

    /**
    * 以下两个接口作废， 详细清参考updateFirmware3()
    */
    String updateFirmware2(String firmwareType, String firmwarePath, String pkgName,boolean isUnInstall);
    String updateFirmware(String firmwareType, String firmwarePath, String pkgName);//为兼容，保留以前的接口

    /**
    * 此接口原服务于 updateFirmware2()接口，现在该功能通过aidl回调接口实现，
    * 后期废弃
    *
     * 返回固件升级状态
     * @updateId 调用updateFirmware返回的updateId
     * @return 固件升级状态:
     * -1 -- 未实现功能
     * 0 -- 升级成功
     * 1 -- 正在升级
     * 2 -- 升级失败
     *
     * app 涉及的状态 下载，暂停，继续，安装，安装中，打开
     */
    int getFirmwareUpdateState(String updateId);

   /**
    *返回回传Log压缩的文件路径
    * 一般log文件 包括：系统log，ANRlog，其他自定义log
    *如：不需要log回传功能，请返回null
    * @param type "new":最新的log; "all":全部的log; "statistical_info":统计信息；"download_path"：设置下载文件保存的路径（请确保该路径文件夹存在）
    * @return 压缩后的log文件（上传成功后 应用端会删除）
    */
    String  getMDMFile(String type);


    /**
    * 此方法已经作废，详细清参考unInstallApp2()方法
    */
    String unInstallApp(String packageName,String json);

   /**
    * 静默卸载app
    *
    * @param packageName 应用包名
    * @param json        Json数据（Json.toString），暂时没有数据，后续扩充备用
    * @param callback    Json数据（Json.toString），参见IResultCallback说明

    * @return   返回值现在没有意义
    */
    String unInstallApp2(String packageName,String json,IResultCallback callback);


   /**
    * 升级固件,静默安装升级app
    * @param firmwareType   app ： APP静默安装固定标识：    (这里需要实现静默安装)  --注意该标识区分大小写，
    *                 其他 ：系统升级标识 :  系统固定标识：ap  ;
    * @param firmwarePath 升级文件路径 （通过file.getPath()获取）
    * @param pkgName 升级文件文件名 （通过file.getName()获取），用于生成唯一updateId
    * @param isUnInstall  升级app：  false: 不可以卸载app
    *                          true： 可卸载的app
    *              升级固件/系统， 此参数都用不到，但回默认传入true，作为一般情况
    *
    *
    * @param callback ：升级状态结果回调接口
    *             app 如果Androd 原生的升级成功失败的广播被修改，也请使用此接口回调
    *
    * @return UpdateId -- 生成方法(Base64.encode(md5sum(UUID.randomUUID().toString() + packageName)
    */
    String updateFirmware3(String firmwareType, String firmwarePath, String pkgName,boolean isUnInstall,IResultCallback callback);

    /**
    * 目前没有用到这个方法
    */
    String universalFun(String command,String valueJson);

    /**
    * 根据不同的 command 命令 来 ,
    * 解析不同的传入参数valueJson （有些不存在参数）
    * 返回结果 回调 universalCallback.result(String json)
    *
    *
    * "customNumber": 客户号，*获取收银台登陆的商户信息（这个需要系统和收银台app 配合）
    * "deviceNumber": 终端号, *获取收银台登陆的商户信息（这个需要系统和收银台app 配合）
    * "PackageInfo" : 安装包信息，主要是签名信息
    */
    void universalFunCallback(String command,String valueJson,IUniversalCallback universalCallback);
}
